#include<bits/stdc++.h> 
using namespace std;
//	给定学生列表，输出对应每个学生的选课情况
//1.每个输入具有一个测试用例，对于每个测试用例，第一行包括两个正整数N≤40000和K≤2500，其
//	中N表示查课的学生数，K表示总课数。
//2.然后学生名字列表会以课表按照此格式给出：对于每一个课程i，首先是课程编号i，以及注册本
//	课的学生数量Ni，Ni≤200。然后接下来Ni行为Ni个学生名称。每个学生名称由3个大写字母加1个
//	数字组成
//3.最后一行包括N个需要查询的学生的名字 
//4.对于每一个测试用例，输出N个结果。每一行是一个学生的信息，首先是学生的姓名，然后是这个
//	学生选课的总数，最后是按照升序输出的课程编号。输出和输入顺序必须一致。
//5.统计，简单题目不多介绍 
unordered_map<string, int> stu_map;	//存储姓名与向量的对应关系 
vector<int> courses[175760];	//本题最坑的点就是，题干说浙大40000人，但是指的是查询的N有40000，实际学生得按照姓名的特征来开向量数组，即26*26*26*10，不然就段错误 
int main(){
	int N,K;
	cin>>N>>K;
	int count_ = 0;
	for(int i = 0;i<K;i++){
		int index, Ni;
		cin>>index>>Ni;
		for(int j = 0;j<Ni;j++){
			string name;
			cin>>name;
			if(stu_map.find(name)!=stu_map.end()){
				courses[stu_map[name]].push_back(index);
			}
			else{
				courses[count_].push_back(index);
				stu_map[name] = count_;
				count_++;
			}
		}
	} 
	for(int i = 0;i<N;i++){
		string query_name;
		cin>>query_name;
		if(stu_map.find(query_name)==stu_map.end()) cout<<query_name<<" 0"<<endl;
		else{
			int id = stu_map[query_name];
			int l = courses[id].size();
			cout<<query_name<<" "<<l<<" ";
			sort(courses[id].begin(),courses[id].end());
			for(int j=0;j<l;j++){
				cout<<courses[id][j];
				if(j==l-1) cout<<endl;
				else cout<<" ";
			}
			
		}
	}
	return 0;
} 